package com.vehiclemanagement.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.vehiclemanagement.entity.MaintenanceReminder;

import java.time.LocalDate;
import java.util.List;
import java.util.Map;

/**
 * 车辆维修保养提醒服务接口
 */
public interface MaintenanceReminderService extends IService<MaintenanceReminder> {

    /**
     * 分页查询维修保养提醒
     *
     * @param current       当前页
     * @param size          每页大小
     * @param searchTerm    搜索关键词
     * @param vehicleId     车辆ID
     * @param reminderType  提醒类型
     * @param status        状态
     * @param startTime     开始时间
     * @param endTime       结束时间
     * @return 分页结果
     */
    IPage<MaintenanceReminder> pageMaintenanceReminders(Integer current, Integer size, String searchTerm,
                                                     Long vehicleId, Integer reminderType, Integer status,
                                                     LocalDate startTime, LocalDate endTime);

    /**
     * 根据ID获取维修保养提醒详情
     *
     * @param id 提醒ID
     * @return 维修保养提醒详情
     */
    MaintenanceReminder getMaintenanceReminderById(Long id);

    /**
     * 添加维修保养提醒
     *
     * @param reminder 维修保养提醒
     * @return 是否成功
     */
    boolean addMaintenanceReminder(MaintenanceReminder reminder);

    /**
     * 更新维修保养提醒
     *
     * @param reminder 维修保养提醒
     * @return 是否成功
     */
    boolean updateMaintenanceReminder(MaintenanceReminder reminder);

    /**
     * 删除维修保养提醒
     *
     * @param id 提醒ID
     * @return 是否成功
     */
    boolean deleteMaintenanceReminder(Long id);

    /**
     * 更新提醒状态
     *
     * @param id     提醒ID
     * @param status 新状态
     * @return 是否成功
     */
    boolean updateReminderStatus(Long id, Integer status);

    /**
     * 获取待处理提醒数量
     *
     * @return 待处理提醒数量
     */
    int countPendingReminders();

    /**
     * 获取指定车辆的提醒列表
     *
     * @param vehicleId 车辆ID
     * @return 提醒列表
     */
    List<MaintenanceReminder> getMaintenanceRemindersByVehicleId(Long vehicleId);

    /**
     * 获取即将到期的提醒列表
     *
     * @param days 天数阈值
     * @return 即将到期的提醒列表
     */
    List<MaintenanceReminder> getUpcomingReminders(Integer days);

    /**
     * 获取已超期的提醒列表
     *
     * @return 已超期的提醒列表
     */
    List<MaintenanceReminder> getOverdueReminders();

    /**
     * 根据里程数获取应该提醒的车辆
     *
     * @return 需要提醒的车辆及提醒详情
     */
    List<Map<String, Object>> getVehiclesExceedingMileageThreshold();

    /**
     * 处理和忽略提醒
     * 
     * @param id 提醒ID
     * @param status 状态（1-已处理，2-已忽略）
     * @param remark 备注
     * @return 是否成功
     */
    boolean processReminder(Long id, Integer status, String remark);
    
    /**
     * 获取按提醒类型统计的数据
     *
     * @return 提醒类型统计数据
     */
    List<Map<String, Object>> countRemindersByType();
} 